home *** CD-ROM | disk | FTP | other *** search
- PAGE 60,132
- TITLE JUSTIFY - PRINTER JUSTIFY PROGRAM
- JUS_STACK SEGMENT PARA STACK 'STACK'
- DB 128 DUP('STACK ')
- JUS_STACK ENDS
- WORKAREA SEGMENT PARA 'DATA'
- AREA DB 512 DUP(?)
- FCB DB 2
- FILENAME DB 'PRNTFILE'
- EXTEN DB ' '
- CURBLK DW 0
- RECSIZ DW 0
- FILSIZ DW 0
- DATE DW 0
- TIME DW 0
- DB ' '
- REC DB 0
- RANREC DD 0
- COL DB 0
- TRTAB DW 396 DUP(0)
- DW 0B ;!
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 111100100B
- DW 111100100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;"
- DW 0B
- DW 0B
- DW 111000000B
- DW 111000000B
- DW 0B
- DW 0B
- DW 111000000B
- DW 111000000B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;#
- DW 1010000B
- DW 1010000B
- DW 111111100B
- DW 111111100B
- DW 1010000B
- DW 1010000B
- DW 111111100B
- DW 111111100B
- DW 1010000B
- DW 1010000B
- DW 0B
- DW 0B ;$
- DW 1100000B
- DW 11101000B
- DW 10101000B
- DW 10101000B
- DW 111111100B
- DW 111111100B
- DW 10101000B
- DW 10101000B
- DW 10111000B
- DW 110000B
- DW 0B
- DW 0B ;%
- DW 111000000B
- DW 111000100B
- DW 101001000B
- DW 111011000B
- DW 111110000B
- DW 1111100B
- DW 11011100B
- DW 110011000B
- DW 100011100B
- DW 11100B
- DW 0B
- DW 0B ;&
- DW 0B
- DW 0B
- DW 11001100B
- DW 111011110B
- DW 100110110B
- DW 101111100B
- DW 11011100B
- DW 111011000B
- DW 111100B
- DW 100100B
- DW 0B
- DW 0B ;'
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 110100000B
- DW 111100000B
- DW 111000000B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;(
- DW 0B
- DW 0B
- DW 0B
- DW 1110000B
- DW 11111000B
- DW 110001100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;)
- DW 0B
- DW 0B
- DW 0B
- DW 100000100B
- DW 110001100B
- DW 11111000B
- DW 1110000B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;*
- DW 100000B
- DW 10101000B
- DW 11111000B
- DW 1110000B
- DW 111111100B
- DW 111111100B
- DW 1110000B
- DW 11111000B
- DW 10101000B
- DW 100000B
- DW 0B
- DW 0B ;+
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 111111100B
- DW 111111100B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 0B
- DW 0B ;,
- DW 0B
- DW 0B
- DW 0B
- DW 1101B
- DW 1111B
- DW 1110B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;-
- DW 0B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 0B
- DW 0B
- DW 0B ;.
- DW 0B
- DW 0B
- DW 0B
- DW 1100B
- DW 1100B
- DW 1100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;/
- DW 0B
- DW 100B
- DW 1100B
- DW 11000B
- DW 110000B
- DW 1100000B
- DW 11000000B
- DW 110000000B
- DW 100000000B
- DW 0B
- DW 0B
- DW 0B ;0
- DW 0B
- DW 1110000B
- DW 11111000B
- DW 110001100B
- DW 100000100B
- DW 100000100B
- DW 110001100B
- DW 11111000B
- DW 1110000B
- DW 0B
- DW 0B
- DW 0B ;1
- DW 0B
- DW 0B
- DW 10000100B
- DW 110000100B
- DW 111111100B
- DW 111111100B
- DW 100B
- DW 100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;2
- DW 0B
- DW 0B
- DW 10000100B
- DW 110001100B
- DW 100011100B
- DW 100110100B
- DW 101100100B
- DW 111000100B
- DW 110000100B
- DW 0B
- DW 0B
- DW 0B ;3
- DW 0B
- DW 0B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 101000100B
- DW 111100100B
- DW 110111100B
- DW 100011100B
- DW 0B
- DW 0B
- DW 0B ;4
- DW 0B
- DW 10000B
- DW 110000B
- DW 1110000B
- DW 11010000B
- DW 110010000B
- DW 111111100B
- DW 111111100B
- DW 10000B
- DW 10000B
- DW 0B
- DW 0B ;5
- DW 0B
- DW 111101000B
- DW 111101100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100111100B
- DW 100011100B
- DW 100000000B
- DW 0B
- DW 0B
- DW 0B ;6
- DW 0B
- DW 0B
- DW 1110000B
- DW 11111000B
- DW 110101100B
- DW 100100100B
- DW 100100B
- DW 111100B
- DW 11000B
- DW 0B
- DW 0B
- DW 0B ;7
- DW 0B
- DW 100000100B
- DW 100001100B
- DW 100011000B
- DW 100110000B
- DW 101100000B
- DW 111000000B
- DW 110000000B
- DW 100000000B
- DW 0B
- DW 0B
- DW 0B ;8
- DW 0B
- DW 11011000B
- DW 111111100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 111111100B
- DW 11011000B
- DW 0B
- DW 0B
- DW 0B ;9
- DW 0B
- DW 11000000B
- DW 111100000B
- DW 100100000B
- DW 100100100B
- DW 100101100B
- DW 100111000B
- DW 111110000B
- DW 11100000B
- DW 0B
- DW 0B
- DW 0B ;:
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 11001100B
- DW 11001100B
- DW 11001100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;;
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 11001101B
- DW 11001111B
- DW 11001110B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;<
- DW 0B
- DW 0B
- DW 0B
- DW 100000B
- DW 1110000B
- DW 11011000B
- DW 110001100B
- DW 1000000100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;=
- DW 0B
- DW 0B
- DW 1010000B
- DW 1010000B
- DW 1010000B
- DW 1010000B
- DW 1010000B
- DW 1010000B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;>
- DW 0B
- DW 0B
- DW 0B
- DW 100000100B
- DW 110001100B
- DW 11011000B
- DW 1110000B
- DW 100000B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;?
- DW 0B
- DW 10000000B
- DW 110000000B
- DW 100000000B
- DW 100110100B
- DW 100100100B
- DW 100100000B
- DW 111000000B
- DW 11000000B
- DW 0B
- DW 0B
- DW 0B ;@
- DW 11111000B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100100100B
- DW 101110100B
- DW 101010100B
- DW 101010100B
- DW 101010100B
- DW 111110100B
- DW 11110100B
- DW 0B ;A
- DW 1111100B
- DW 11111100B
- DW 10010000B
- DW 10010000B
- DW 100010000B
- DW 100010000B
- DW 10010000B
- DW 10010000B
- DW 11111100B
- DW 1111100B
- DW 0B
- DW 0B ;B
- DW 0B
- DW 100000100B
- DW 111111100B
- DW 111111100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 111111100B
- DW 11011000B
- DW 0B
- DW 0B ;C
- DW 0B
- DW 11111000B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 110001100B
- DW 10001000B
- DW 0B
- DW 0B ;D
- DW 100000100B
- DW 100000100B
- DW 111111100B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 11111000B
- DW 11111000B
- DW 0B
- DW 0B ;E
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100000100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B ;F
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 100000000B
- DW 100000000B
- DW 0B
- DW 0B
- DW 0B ;G
- DW 11111000B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100111100B
- DW 111000B
- DW 0B
- DW 0B ;H
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 100000B
- DW 111111100B
- DW 111111100B
- DW 0B
- DW 0B
- DW 0B ;I
- DW 0B
- DW 0B
- DW 100000100B
- DW 100000100B
- DW 111111100B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;J
- DW 0B
- DW 11000B
- DW 11100B
- DW 100B
- DW 100000100B
- DW 100000100B
- DW 111111100B
- DW 111111000B
- DW 100000000B
- DW 100000000B
- DW 0B
- DW 0B ;K
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 100000B
- DW 1110000B
- DW 1110000B
- DW 11011000B
- DW 110001100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B ;L
- DW 111111100B
- DW 111111100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 0B
- DW 0B
- DW 0B ;M
- DW 111111100B
- DW 111111100B
- DW 100000000B
- DW 110000000B
- DW 11000000B
- DW 11000000B
- DW 110000000B
- DW 100000000B
- DW 111111100B
- DW 111111100B
- DW 0B
- DW 0B ;N
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 110000000B
- DW 11000000B
- DW 1100000B
- DW 110000B
- DW 111111100B
- DW 111111100B
- DW 0B
- DW 0B
- DW 0B ;O
- DW 11111000B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 111111100B
- DW 11111000B
- DW 0B
- DW 0B ;P
- DW 111111100B
- DW 111111100B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 11000000B
- DW 11000000B
- DW 0B
- DW 0B ;Q
- DW 11111000B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100100100B
- DW 100010100B
- DW 100001000B
- DW 111111100B
- DW 11111100B
- DW 0B
- DW 0B ;R
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 100100000B
- DW 100100000B
- DW 100100000B
- DW 100110000B
- DW 100111000B
- DW 111101100B
- DW 11000100B
- DW 0B
- DW 0B ;S
- DW 11001000B
- DW 111101100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 100100100B
- DW 110111100B
- DW 10011000B
- DW 0B
- DW 0B ;T
- DW 100000000B
- DW 100000000B
- DW 100000000B
- DW 100000000B
- DW 111111100B
- DW 111111100B
- DW 100000000B
- DW 100000000B
- DW 100000000B
- DW 100000000B
- DW 0B
- DW 0B ;U
- DW 111111000B
- DW 111111100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 111111100B
- DW 111111000B
- DW 0B
- DW 0B ;V
- DW 0B
- DW 111000000B
- DW 111100000B
- DW 110000B
- DW 11000B
- DW 1100B
- DW 11000B
- DW 110000B
- DW 111100000B
- DW 111000000B
- DW 0B
- DW 0B ;W
- DW 111111100B
- DW 111111100B
- DW 11000B
- DW 110000B
- DW 1100000B
- DW 1100000B
- DW 110000B
- DW 11000B
- DW 111111100B
- DW 111111100B
- DW 0B
- DW 0B ;X
- DW 0B
- DW 100000100B
- DW 110001100B
- DW 11011000B
- DW 1110000B
- DW 100000B
- DW 1110000B
- DW 11011000B
- DW 110001100B
- DW 100000100B
- DW 0B
- DW 0B ;Y
- DW 100000000B
- DW 110000000B
- DW 11000000B
- DW 1100000B
- DW 111100B
- DW 111100B
- DW 1100000B
- DW 11000000B
- DW 110000000B
- DW 100000000B
- DW 0B
- DW 0B ;Z
- DW 0B
- DW 100000100B
- DW 100001100B
- DW 100011100B
- DW 100110100B
- DW 101100100B
- DW 111000100B
- DW 110000100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B ;[
- DW 0B
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;\
- DW 0B
- DW 100000000B
- DW 110000000B
- DW 11000000B
- DW 1100000B
- DW 110000B
- DW 11000B
- DW 1100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;]
- DW 0B
- DW 0B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 100000100B
- DW 111111100B
- DW 111111100B
- DW 0B
- DW 0B
- DW 0B
- DW 12 DUP(0)
- DW 0B ;_
- DW 0B
- DW 1B
- DW 1B
- DW 1B
- DW 1B
- DW 1B
- DW 1B
- DW 1B
- DW 1B
- DW 0B
- DW 0B
- DW 0B ;`
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 111000000B
- DW 111100000B
- DW 110100000B
- DW 0B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;a
- DW 1000B
- DW 1011100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1011100B
- DW 111000B
- DW 100B
- DW 0B
- DW 0B ;b
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1111100B
- DW 111000B
- DW 0B
- DW 0B
- DW 0B ;c
- DW 0B
- DW 111000B
- DW 1111100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 0B
- DW 0B ;d
- DW 0B
- DW 111000B
- DW 1101100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 111111100B
- DW 111111100B
- DW 0B
- DW 0B ;e
- DW 111000B
- DW 1101100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1110100B
- DW 110000B
- DW 0B
- DW 0B
- DW 0B ;f
- DW 0B
- DW 0B
- DW 100000B
- DW 100000B
- DW 11111100B
- DW 111111100B
- DW 100100000B
- DW 100100000B
- DW 100000000B
- DW 0B
- DW 0B
- DW 0B ;g
- DW 0B
- DW 111000B
- DW 1101100B
- DW 1000101B
- DW 1000101B
- DW 1000101B
- DW 1000101B
- DW 1111101B
- DW 1111111B
- DW 10B
- DW 0B
- DW 0B ;h
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1111100B
- DW 111100B
- DW 0B
- DW 0B ;i
- DW 0B
- DW 0B
- DW 1000100B
- DW 1000100B
- DW 101111100B
- DW 101111100B
- DW 100B
- DW 100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;j
- DW 0B
- DW 0B
- DW 0B
- DW 1B
- DW 1000001B
- DW 1000001B
- DW 101111111B
- DW 101111111B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;k
- DW 0B
- DW 0B
- DW 111111100B
- DW 111111100B
- DW 10000B
- DW 111000B
- DW 1101100B
- DW 1000100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;l
- DW 0B
- DW 0B
- DW 0B
- DW 100000100B
- DW 100000100B
- DW 111111100B
- DW 111111100B
- DW 100B
- DW 100B
- DW 0B
- DW 0B
- DW 0B ;m
- DW 1111100B
- DW 1111100B
- DW 1000000B
- DW 1000000B
- DW 111100B
- DW 1111100B
- DW 1000000B
- DW 1000000B
- DW 1111100B
- DW 111100B
- DW 0B
- DW 0B ;n
- DW 0B
- DW 1111100B
- DW 1111100B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 111100B
- DW 111100B
- DW 0B
- DW 0B ;O
- DW 0B
- DW 111000B
- DW 1111100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1111100B
- DW 111000B
- DW 0B
- DW 0B ;p
- DW 0B
- DW 1111111B
- DW 1111111B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1111100B
- DW 111000B
- DW 0B
- DW 0B ;q
- DW 0B
- DW 111000B
- DW 1111100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 1111111B
- DW 1111111B
- DW 0B
- DW 0B ;r
- DW 0B
- DW 1111100B
- DW 1111100B
- DW 100000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 1000000B
- DW 0B
- DW 0B
- DW 0B ;s
- DW 0B
- DW 1110100B
- DW 1110100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1010100B
- DW 1011100B
- DW 1011100B
- DW 0B
- DW 0B
- DW 0B ;t
- DW 0B
- DW 1000000B
- DW 1000000B
- DW 111111000B
- DW 111111100B
- DW 1000100B
- DW 1000100B
- DW 1000100B
- DW 100B
- DW 100B
- DW 0B
- DW 0B ;u
- DW 0B
- DW 1111000B
- DW 1111100B
- DW 100B
- DW 100B
- DW 100B
- DW 100B
- DW 1111100B
- DW 1111000B
- DW 100B
- DW 0B
- DW 0B ;v
- DW 0B
- DW 1000000B
- DW 1100000B
- DW 110000B
- DW 11000B
- DW 1100B
- DW 11000B
- DW 110000B
- DW 1100000B
- DW 1000000B
- DW 0B
- DW 0B ;w
- DW 0B
- DW 1111100B
- DW 1111100B
- DW 1000B
- DW 10000B
- DW 100000B
- DW 10000B
- DW 1000B
- DW 1111100B
- DW 1111100B
- DW 0B
- DW 0B ;x
- DW 0B
- DW 0B
- DW 1101100B
- DW 111000B
- DW 10000B
- DW 10000B
- DW 111000B
- DW 1101100B
- DW 0B
- DW 0B
- DW 0B
- DW 0B ;y
- DW 0B
- DW 1000000B
- DW 1100001B
- DW 110011B
- DW 11110B
- DW 100B
- DW 11000B
- DW 110000B
- DW 1100000B
- DW 1000000B
- DW 0B
- DW 0B ;z
- DW 0B
- DW 1000100B
- DW 1001100B
- DW 1001100B
- DW 1010100B
- DW 1010100B
- DW 1110100B
- DW 1100100B
- DW 1000100B
- DW 0B
- DW 0B
- DW 0B ;{
- DW 0B
- DW 0B
- DW 0B
- DW 100000B
- DW 111011100B
- DW 110001100B
- DW 100000100B
- DW 100000100B
- DW 0B
- DW 0B
- DW 0B
- DW 12 DUP(0)
- DW 0B ;}
- DW 0B
- DW 0B
- DW 0B
- DW 100000100B
- DW 100000100B
- DW 110001100B
- DW 111011100B
- DW 100000B
- DW 0B
- DW 0B
- DW 0B
- DW 1032 DUP(0)
- DW 0B ;¢
- DW 0B
- DW 1110000B
- DW 11111000B
- DW 10001000B
- DW 10001000B
- DW 111111100B
- DW 111111100B
- DW 10001000B
- DW 10001000B
- DW 0B
- DW 0B
- DW 1560 DUP(0)
- LINE2 DB 128 DUP(32)
- DB 255
- L1 DB 960 DUP(0)
- DB 255
- L2 DB 960 DUP(0)
- DB 255
- DB 970 DUP(255)
- COL59 DB 0
- HCOL DB 0
- LCOL DB 0
- C12 DB 12
- IBITS DW 0
- IREM DW 0
- C24 DB 24
- L1SUB DW 0
- HSI1 DW 0
- HSI2 DW 0
- HSI3 DW 0
- HSI4 DW 0
- HSI5 DW 0
- HSI6 DW 0
- HSI9 DW 0
- HSI7 DW 0
- HBYTE1 DB 0
- HBYTE2 DB 0
- HWORD DW 0
- ENDSW DW 0
- LINCNT DW 0
- PAGESIZE DW 61
- HOLDDX DW 0
- PRTPRMPT DB 'ENTER PRINTER TYPE 1 = IBM'
- DB 0DH
- DB 0AH
- DB 0AH
- DB ' 2 = EPSON MX80 OR MX100'
- DB 0DH
- DB 0AH
- DB 0AH
- DB ' 3 = EPSON FX80 OR FX100'
- DB 0DH
- DB 0AH
- DB 0AH
- DB ' 4 = STAR MICRONICS GEMINI 10X OR 15X'
- DB 0DH
- DB 0AH
- DB 0AH
- DB ' 5 = STAR MICRONICS DELTA 10 OR 15'
- DB 0DH
- DB 0AH
- DB 0AH
- DB '<1>'
- DB 24H
- PRMPEL DB 0DH
- DB 0AH
- DB 'ENTER LAST LINE ON PAGE'
- DB 0DH
- DB 0AH
- DB '<60> '
- DB 24H
- PRMPPS DB 0DH
- DB 0AH
- DB 'ENTER LINES PER PAGE'
- DB 0DH
- DB 0AH
- DB '<66> '
- DB 24H
- PRMPFN DB 0DH
- DB 0AH
- DB 'ENTER FILE NAME'
- DB 0DH
- DB 0AH
- DB '<B:PRNTFILE>'
- DB 24H
- PRMPLM DB 0DH
- DB 0AH
- DB 'ENTER LEFT MARGIN'
- DB 0DH
- DB 0AH
- DB '<1>'
- DB 24H
- PRMPRM DB 0DH
- DB 0AH
- DB 'ENTER RIGHT MARGIN'
- DB 0DH
- DB 0AH
- DB '<80>'
- DB 24H
- PRMPSL DB 0DH
- DB 0AH
- DB 'ENTER STARTING LINE'
- DB 0DH
- DB 0AH
- DB '<6>'
- DB 24H
- PERR DB 0DH
- DB 0AH
- DB 'PRINTER ERROR'
- DB 0DH
- DB 0AH
- DB 24H
- OPAPR DB 0DH
- DB 0AH
- DB 'PUT PAPER IN PRINTER THEN HIT ENTER'
- DB 0DH
- DB 0AH
- DB 24H
- TOUT DB 0DH
- DB 0AH
- DB 'ENABLE PRINTER THEN HIT ENTER'
- DB 0DH
- DB 0AH
- DB 24H
- OPNERR DB 0DH
- DB 0AH
- DB 'FILE NOT FOUND'
- DB 0DH
- DB 0AH
- DB 24H
- ENDMSG DB 0DH
- DB 0AH
- DB 'TO END PROGRAM, TYPE "E"'
- DB 0DH
- DB 0AH
- DB 24H
- COPYRITE DB ' COPYRIGHT (C) 1984 COMFAX'
- DB 0DH
- DB 0AH
- DB 0AH
- DB 0AH
- DB 24H
- PRNAME DB ' JUSTIFY BY COMFAX'
- DB 0DH
- DB 0AH
- DB 0AH
- DB 24H
- BUFFER DB 20
- DB 64 DUP(0)
- PRTRCODE DB '1'
- LMARG DW 1
- RMARG DW 80
- SLINE DW 6
- ELINE DW 60
- PAGSIZ DW 66
- FILNAM DB 13 DUP(32)
- PGCOMD DB 2
- DB '66 '
- SPAC16 DB 27
- DB 65
- DB 12
- SPAC19 DB 27
- DB 65
- DB 8
- SPAC118 DB 27
- DB 65
- DB 4
- DIRPRE DB ' '
- DIRAREA DB 64 DUP(0)
- DIR2PRE DB ' '
- DIR2AREA DB 64 DUP(0)
- HOLDBX DW 0
- PATHSW DB 0
- HOLDAL DB 0
- DEFAULT DB 0
- HOLDDRIV DB 0
- INDENT DW 0
- HMAR DB ' '
- WORKAREA ENDS
- EXTRA SEGMENT PARA 'DATA'
- LINE1 DB 128 DUP(32)
- DB 255
- EXTRA ENDS
- JUS_CSEG SEGMENT PARA 'CODE'
- JUS_PROC PROC FAR
- ASSUME CS:JUS_CSEG,DS:WORKAREA,SS:JUS_STACK,ES:EXTRA
- PUSH DS ;Set return segment addr to stack
- SUB AX,AX ;Clear a reg
- PUSH AX ;Put zero return addr to stack
- STI ;ENABLE INTERRUPTS
- MOV AX,SEG WORKAREA ;SET SEGREG BASE OF DATA BUFFER
- MOV DS,AX
- MOV AX,SEG EXTRA ;SET SEGREG BASE
- MOV ES,AX
- MOV AH,19H ;GET DEFAULT DRIVE
- INT 21H
- ADD AL,41H
- MOV DEFAULT,AL
- CLSCR: MOV AX,600H ;CLEAR SCREEN
- MOV CX,0
- MOV DX,2479H
- MOV BH,7
- INT 10H
- MOV AH,9 ;DISPLAY PROGRAM NAME
- LEA DX,PRNAME
- INT 21H
- MOV AH,9 ;DISPLAY COPYRIGHT NOTICE
- LEA DX,COPYRITE
- INT 21H
- MOV AH,9 ;DISPLAY PRINTER PROMPT
- LEA DX,PRTPRMPT
- INT 21H
- MOV AH,12 ;READ KEYBOARD CHARACTER AND DISPLAY IT
- MOV AL,1
- INT 21H
- CMP AL,13 ;CR?
- JE DLM ;YES--JUMP
- CMP AL,'1' ;CHECK FOR LEGAL PRINTER CODE
- JL CLSCR
- CMP AL,'6'
- JGE CLSCR
- MOV PRTRCODE,AL ;STORE PRINTER CODE
- DLM: MOV AH,9 ;DISPLAY LEFT MARGIN PROMPT
- LEA DX,PRMPLM
- INT 21H
- LEA DX,BUFFER ;READ FROM KEYBOARD INTO BUFFER
- MOV AL,4
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- CMP BUFFER+1,0 ;CR ONLY?
- JE DRM ;YES--JUMP
- LEA BX,BUFFER+2 ;CONVET IT TO BINARY
- MOV CL,BUFFER+1
- MOV CH,0
- CALL CONVERT
- JNC GOOD1 ;IS IT VALID?
- JMP DLM
- GOOD1: MOV LMARG,AX ;STORE LEFT MARGIN
- DRM: MOV AH,9 ;DISPLAY RIGHT MARGIN PROMPT
- LEA DX,PRMPRM
- INT 21H
- LEA DX,BUFFER ;READ FROM KEYBOARD INTO BUFFER
- MOV AL,4
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- CMP BUFFER+1,0 ;CR ONLY?
- JE DSL ;YES--JUMP
- LEA BX,BUFFER+2 ;CONVET IT TO BINARY
- MOV CL,BUFFER+1
- MOV CH,0
- CALL CONVERT
- JNC GOOD2 ;IS IT VALID?
- JMP DRM
- GOOD2: MOV RMARG,AX ;STORE RIGHT MARGIN
- DSL: MOV AH,9 ;DISPLAY STARTING LINE
- LEA DX,PRMPSL
- INT 21H
- LEA DX,BUFFER ;READ FROM KEYBOARD INTO BUFFER
- MOV AL,4
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- CMP BUFFER+1,0 ;CR ONLY?
- JE DEL ;YES--JUMP
- LEA BX,BUFFER+2 ;CONVET IT TO BINARY
- MOV CL,BUFFER+1
- MOV CH,0
- CALL CONVERT
- JNC GOOD3 ;IS IT VALID?
- JMP DSL
- GOOD3: MOV SLINE,AX ;STORE STARTING LINE
- DEL: MOV AH,9 ;DISPLAY ENDING LINE
- LEA DX,PRMPEL
- INT 21H
- LEA DX,BUFFER ;READ FROM KEYBOARD INTO BUFFER
- MOV AL,4
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- CMP BUFFER+1,0 ;CR ONLY?
- JE DPS ;YES--JUMP
- LEA BX,BUFFER+2 ;CONVET IT TO BINARY
- MOV CL,BUFFER+1
- MOV CH,0
- CALL CONVERT
- JNC GOOD4 ;IS IT VALID?
- JMP DEL
- GOOD4: MOV ELINE,AX ;STORE ENDING LINE
- DPS: MOV AH,9 ;DISPLAY LINES PER PAGE
- LEA DX,PRMPPS
- INT 21H
- LEA DX,BUFFER ;READ FROM KEYBOARD INTO BUFFER
- MOV AL,4
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- CMP BUFFER+1,0 ;CR ONLY?
- JE DFN ;YES--JUMP
- LEA BX,BUFFER+2 ;CONVET IT TO BINARY
- MOV CL,BUFFER+1
- MOV CH,0
- CALL CONVERT
- JNC GOOD5 ;IS IT VALID?
- JMP DPS
- GOOD5: MOV PAGSIZ,AX ;STORE LINES PER PAGE
- DFN: MOV AH,9 ;DISPLAY FILE NAME
- LEA DX,PRMPFN
- INT 21H
- LEA DX,BUFFER ;READ FROM KEYBOARD INTO BUFFER
- MOV AL,64
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- CMP BUFFER+1,0
- JNE NINIT
- JMP INITPRT
- NINIT: CMP BUFFER+1,1
- JNE FNA
- JMP ZRODFLT
- FNA: CMP BUFFER+1,2
- JNE FNB
- JMP ZRODFLT
- FNB: CMP BUFFER+3,':'
- JE FNC
- JMP ZRODFLT
- FNC: MOV AL,BUFFER+2
- CMP AL,96
- JBE NOCONV1
- CMP AL,122
- JG NOCONV1
- SUB AL,32
- NOCONV1: CMP AL,'A'
- JL DFN
- CMP AL,'H'
- JGE DFN
- MOV DIRPRE,AL
- MOV DIRPRE+1,':'
- MOV DIRPRE+2,'\'
- MOV DIR2PRE,AL
- MOV DIR2PRE+1,':'
- SUB AL,40H
- MOV FCB,AL
- MOV HOLDDRIV,AL
- MOV CX,8
- MOV SI,0
- LUPBLK1: MOV AL,32
- MOV FILENAME[SI],AL
- INC SI
- LOOP LUPBLK1
- MOV BX,OFFSET BUFFER+4
- MOV SI,0
- MOV CX,8
- LUPFN1: MOV AL,[BX]
- MOV HOLDBX,BX
- CMP AL,'\' ;WAS A PATH SPECIFIED
- JE PRCP1 ;YES--JUMP
- JMP LFN1Y
- PRCP1: MOV SI,0
- MOV PATHSW,1
- MOV AL,[BX]
- LUPP1: CMP AL,96
- JBE NOCONV2
- CMP AL,122
- JG NOCONV2
- SUB AL,32
- NOCONV2: MOV DIR2AREA[SI],AL
- INC BX
- INC SI
- MOV AL,[BX]
- CMP AL,13
- JNE LUPP1
- LUPP2: DEC BX
- DEC SI
- MOV AL,[BX]
- CMP AL,'\'
- JNE LUPP2
- CMP BX,HOLDBX
- JNE LUPP3
- INC SI
- MOV DIR2AREA[SI],0
- INC BX
- MOV SI,0
- MOV CX,8
- JMP LFN1Z
- LUPP3: MOV DIR2AREA[SI],0
- INC BX
- MOV SI,0
- MOV CX,8
- JMP LFN1Z
- LFN1Y: MOV AL,[BX]
- CMP AL,96
- JBE NOCONV3
- CMP AL,122
- JG NOCONV3
- SUB AL,32
- NOCONV3: MOV FILENAME[SI],AL
- INC SI
- INC BX
- LFN1Z: MOV AL,[BX]
- CMP AL,13
- JE CKIBMP
- CMP AL,'.'
- JE PRCEXT
- JMP LFN1Y
- PRCEXT: INC BX
- MOV AL,[BX]
- CMP AL,13
- JNE CEXT
- JMP DFN
- CEXT: MOV SI,0
- MOV CX,3
- LUPEX1: MOV AL,[BX]
- CMP AL,96
- JBE NOCONV4
- CMP AL,122
- JG NOCONV4
- SUB AL,32
- NOCONV4: MOV EXTEN[SI],AL
- INC SI
- INC BX
- MOV AL,[BX]
- CMP AL,13
- JE CKIBMP
- LOOP LUPEX1
- CKIBMP: CMP PRTRCODE,'1' ;IBM PRINTER?
- JE ISIBM ;YES--JUMP
- JMP INITPRT
- ISIBM: MOV SPAC16+1,51
- MOV SPAC16+2,36
- MOV SPAC19+1,51
- MOV SPAC19+2,24
- MOV SPAC118+1,51
- MOV SPAC118+2,12
- INITPRT: MOV AX,600H ;CLEAR SCREEN
- MOV CX,0
- MOV DX,2479H
- MOV BH,7
- INT 10H
- MOV AH,9 ;DISPLAY END MESSAGE
- LEA DX,ENDMSG
- INT 21H
- MOV AX,ELINE ;COMPUTE LINES/PAGE
- SUB AX,SLINE
- INC AX
- MOV PAGESIZE,AX
- MOV DX,0 ;SET PAGE SIZE
- MOV AH,0
- MOV AL,27
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPRA
- RET
- CKPRA: MOV AH,0
- MOV AL,67
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE SETFORM
- RET
- SETFORM: MOV AX,PAGSIZ
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR1
- RET
- CKPR1: MOV DX,0 ;SET PRINTER SPACING TO 1/6 INCH
- MOV AH,0
- MOV AL,SPAC16
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP1
- RET
- ACP1: MOV AH,0
- MOV AL,SPAC16+1
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP1Z
- RET
- ACP1Z: MOV AH,0
- MOV AL,SPAC16+2
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP2
- RET
- ACP2: MOV AX,SLINE
- DEC AX
- CMP AX,0
- JE CKPATH
- MOV CX,AX
- SPACDN1: MOV AH,0 ;SPACE TO STARTING LOCATION ON PAGE
- MOV AL,10
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP3
- RET
- ACP3: LOOP SPACDN1
- CKPATH: CMP PATHSW,1 ;WAS A PATH SPECIFIED?
- JNE AFTINIT ;NO--JUMP
- MOV DL,FCB ;MOVE DRIVE NUMBER
- LEA SI,DIRAREA
- MOV AH,47H
- INT 21H
- MOV AH,3BH
- CMP HOLDDRIV,0 ;WAS A DRIVE SPECIFIED?
- JNE DRIVESPC ;YES--JUMP
- LEA DX,DIR2AREA
- INT 21H
- JMP AFTINIT
- DRIVESPC: LEA DX,DIR2PRE
- INT 21H
- AFTINIT: LEA DX,FCB ;GET LOCATION OF FCB
- MOV AH,15 ;OPEN FILE
- INT 21H
- MOV HOLDAL,AL ;STORE RETURN CODE
- CMP PATHSW,1 ;WAS A PATH SPECIFIED?
- JNE CMPHAL ;NO--JUMP
- MOV AH,3BH
- CMP HOLDDRIV,0 ;WAS A DRIVE SPECIFIED:
- JNE DRIVSP2 ;YES--JUMP
- MOV AL,DEFAULT ;MOVE DEFAULT DRIVE
- MOV DIRPRE,AL
- MOV DIRPRE+1,':'
- MOV DIRPRE+2,'\'
- LEA DX,DIRPRE
- INT 21H
- JMP CMPHAL
- DRIVSP2: LEA DX,DIRPRE
- INT 21H
- CMPHAL: CMP HOLDAL,0
- JE SETRS
- MOV AH,9
- LEA DX,OPNERR
- INT 21H
- RET
- SETRS: MOV RECSIZ,512 ;SET RECORD SIZE
- LEA DX,AREA ;GET LOCATION OF BUFFER
- MOV AH,26 ;SET DISK TRANSFER ADDRESS
- INT 21H
- MOV CX,1 ;CHARACTER COUNT=1
- MOV BX,OFFSET LINE1
- READIT: MOV HOLDDX,DX ;SAVE DX
- MOV ENDSW,0
- LEA DX,FCB ;GET LOCATION OF FCB
- MOV AH,20 ;READ FILE
- INT 21H
- CMP AL,1 ;END OF FILE?
- JNE NE1 ;NO--JUMP
- JMP ENDF1
- NE1: MOV DX,HOLDDX ;RESTORE DX
- MOV HSI5,-1 ;SUBSCRIPT
- INCSUB: INC HSI5 ;INCREMENT SUBSCRIPT
- MOV SI,HSI5
- CMP SI,512 ;END OF RECORD?
- JE READIT
- MOV AL,AREA[SI] ;MOVE BYTE
- CMP AL,10 ;NEWLINE?
- JNE CMPHOF1 ;NO--JUMP
- JMP MOVBX2
- ZRODFLT: MOV CX,8
- MOV SI,0
- LUPBLK2: MOV AL,32
- MOV FILENAME[SI],AL
- INC SI
- LOOP LUPBLK2
- MOV AL,0
- MOV FCB,AL
- MOV BX,OFFSET BUFFER+2
- MOV SI,0
- MOV CX,8
- JMP LUPFN1
- CMPHOF1: CMP AL,12 ;SKIP TO HEAD OF FORM?
- JE SKP1 ;YES--JUMP
- CMP AL,13 ;ELIMINATE VOLKSWRITER SPECIAL CHARACTERS
- JE INCSUB
- CMP AL,26
- JNE NE2
- JMP ENDF1
- NE2: CMP AL,20
- JE INCSUB
- CMP AL,21
- JE INCSUB
- CMP AL,24
- JE INCSUB
- CMP AL,25
- JE INCSUB
- MOV ENDSW,1
- CMP AL,155 ;CENT SIGN?
- JNE NE2XX ;NO--JUMP
- MOV AL,212 ;CONVERT TO PRINTER CENT SIGN
- NE2XX: MOV ES:[BX],AL
- INC BX ;INCREMENT POINTER
- JMP INCSUB
- SKP1: MOV AH,0 ;TELL PRINTER TO SKIP TO HOF
- MOV AL,12
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CHKDP1
- RET
- CHKDP1: MOV DX,0 ;SET PRINTER SPACING TO 1/6 INCH
- MOV AH,0
- MOV AL,SPAC16
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP4
- RET
- ACP4: MOV AH,0
- MOV AL,SPAC16+1
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP5
- RET
- ACP5: MOV AH,0
- MOV AL,SPAC16+2
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP5X
- RET
- ACP5X: MOV AX,SLINE
- DEC AX
- CMP AX,0
- JE ZZZLN
- MOV CX,AX
- SPACDN2: MOV AH,0 ;SPACE TO STARTING LOCATION ON PAGE
- MOV AL,10
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP3X
- RET
- ACP3X: LOOP SPACDN2
- ZZZLN: MOV LINCNT,0 ;ZERO LINE COUNT
- MOV BX,OFFSET LINE1 ;MOVE SPACES TO LINE1
- FSL1: MOV AL,255
- CMP ES:[BX],AL ;END OF LINE?
- JE SOFFL1 ;YES--JUMP
- MOV AL,32 ;MOVE A SPACE
- MOV ES:[BX],AL
- INC BX
- JMP FSL1
- SOFFL1: MOV BX,OFFSET LINE1
- NLLUP: INC HSI5
- MOV SI,HSI5
- CMP SI,512 ;END OF RECORD
- JNE CKNL1 ;NO--JUMP
- MOV HOLDDX,DX ;SAVE DX
- MOV ENDSW,0
- LEA DX,FCB ;GET LOCATION OF FCB
- MOV AH,20 ;READ FILE
- INT 21H
- CMP AL,1 ;END OF FILE?
- JNE MOVZSI ;NO--JUMP
- JMP ENDF1
- MOVZSI: MOV DX,HOLDDX
- MOV SI,0
- CKNL1: MOV AL,AREA[SI] ;SEARCH FOR NEWLINE
- CMP AL,10
- JNE NLLUP
- JMP INCSUB
- MOVBX2: MOV AH,6 ;READ KEYBOARD CHARACTER
- MOV DL,0FFH
- INT 21H
- CMP AL,'E' ;END IT?
- JNE COMPSE
- JMP EOJ
- COMPSE: CMP AL,'e'
- JNE MOVBX8 ;NO--JUMP
- JMP EOJ
- MOVBX8: MOV AH,0BH
- INT 21H
- MOV BX,OFFSET LINE2
- JMP INCSUB2
- READIT2: MOV HOLDDX,DX ;SAVE DX
- MOV ENDSW,999
- LEA DX,FCB ;GET LOCATION OF FCB
- MOV AH,20 ;READ FILE
- INT 21H
- CMP AL,1 ;END OF FILE?
- JNE NE2B ;NO--JUMP
- JMP ENDF1
- NE2B: MOV DX,HOLDDX ;RESTORE DX
- NEWLN1: MOV HSI5,-1 ;SUBSCRIPT
- INCSUB2: INC HSI5 ;INCREMENT SUBSCRIPT
- MOV SI,HSI5
- CMP SI,512 ;END OF RECORD?
- JE READIT2
- MOV AL,AREA[SI] ;MOVE BYTE
- CMP AL,10 ;NEWLINE?
- JNE CKSHOF2 ;NO--JUMP
- JMP NEWLN3
- CKSHOF2: CMP AL,12 ;SKIP TO HEAD OF FORM
- JE SKP2 ;YES--JUMP
- CMP AL,13 ;ELIMINATE VOLKSWRITER SPECIAL CHARACTERS
- JE INCSUB2
- CMP AL,26
- JNE NE3
- JMP ENDF1
- NE3: CMP AL,20
- JE INCSUB2
- CMP AL,21
- JE INCSUB2
- CMP AL,24
- JE INCSUB2
- CMP AL,25
- JE INCSUB2
- CMP AL,155 ;CENT SIGN?
- JNE NE3XX ;NO--JUMP
- MOV AL,212 ;CONVERT TO PRINTER CENT SIGN
- NE3XX: MOV [BX],AL
- MOV ENDSW,2
- INC BX ;INCREMENT POINTER
- JMP INCSUB2
- MVZ1: MOV IBITS,0
- MOV IREM,0
- JMP MOVSI1
- SKP2: MOV AX,PAGESIZE
- SUB AX,2
- MOV LINCNT,AX
- JMP INCSUB2
- FSL2: MOV AL,255
- CMP [BX],AL ;END OF LINE?
- JE SOFFL2 ;YES--JUMP
- MOV AL,32 ;MOVE A SPACE
- MOV [BX],AL
- INC BX
- JMP FSL2
- SOFFL2: MOV BX,OFFSET LINE2
- NLLUP2: INC HSI5
- MOV SI,HSI5
- CMP SI,512 ;END OF RECORD?
- JNE CKNL2 ;NO--JUMP
- MOV HOLDDX,DX ;SAVE DX
- MOV ENDSW,999
- LEA DX,FCB ;GET LOCATION OF FCB
- MOV AH,20 ;READ FILE
- INT 21H
- CMP AL,1 ;END OF FILE?
- JNE MOVZSI2 ;NO--JUMP
- JMP ENDF1
- MOVZSI2: MOV DX,HOLDDX
- MOV SI,0
- CKNL2: MOV AL,AREA[SI] ;SEARCH FOR NEWLINE
- CMP AL,10
- JNE NLLUP2
- JMP INCSUB2
- NEWLN3: MOV AL,255
- CMP [BX],AL
- JE MOVOFF
- MOV AL,32
- MOV [BX],AL
- INC BX
- JMP NEWLN3
- MOVOFF: MOV AX,LINCNT
- CMP AX,PAGESIZE
- JNE MVO
- MOV DX,0 ;SET PRINTER SPACING TO 1/6 INCH
- MOV AH,0
- MOV AL,SPAC16
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP7K
- RET
- ACP7K: MOV AH,0
- MOV AL,SPAC16+1
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP7L
- RET
- ACP7L: MOV AH,0
- MOV AL,SPAC16+2
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACP7M
- RET
- ACP7M: MOV AH,0
- MOV AL,12
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR3
- RET
- CKPR3: MOV LINCNT,0
- MOV AX,SLINE
- DEC AX
- CMP AX,0
- JE MVO
- MOV CX,AX
- SPACDN4: MOV AH,0 ;SPACE TO STARTING LOCATION ON PAGE
- MOV AL,10
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE ACPJJ
- RET
- ACPJJ: LOOP SPACDN4
- MVO: MOV BX,OFFSET LINE1
- ADC BX,RMARG
- DEC BX
- MOV AX,RMARG
- DEC AX
- MOV COL,AL
- MOV AL,COL
- SUB AL,12
- MOV COL59,AL
- MOV SI,LMARG
- DEC SI
- CMP LINE1[SI],'.' ;CHANGE MARGIN?
- JE NM1 ;YES--JUMP
- JMP MOVIND
- NM1: CMP LINE1+1[SI],'.'
- JE NM2
- JMP MOVIND
- NM2: CMP LINE1+3[SI],'M'
- JNE CKSMALM
- CKLARGA: CMP LINE1+4[SI],'A'
- JNE CKSMALA
- CKLARGR: CMP LINE1+5[SI],'R'
- JNE CKSMALR
- CKLARGG: CMP LINE1+6[SI],'G'
- JNE CKSMALG
- CKLARGL: CMP LINE1+2[SI],'L'
- JNE CKSMALL
- JMP SETLEFT
- CKSMALM: CMP LINE1+3[SI],'m'
- JE CKLARGA
- JMP MOVIND
- CKSMALA: CMP LINE1+4[SI],'a'
- JE CKLARGR
- JMP MOVIND
- CKSMALR: CMP LINE1+5[SI],'r'
- JE CKLARGG
- JMP MOVIND
- CKSMALG: CMP LINE1+6[SI],'g'
- JE CKLARGL
- JMP MOVIND
- CKSMALL: CMP LINE1+2[SI],'l'
- JNE CKRIGHT
- JMP SETLEFT
- CKRIGHT: CMP LINE1+2[SI],'R'
- JNE CKRGT2
- JMP SETRIGHT
- CKRGT2: CMP LINE1+2[SI],'r'
- JE JSR
- JMP MOVIND
- JSR: JMP SETRIGHT
- SETLEFT: MOV CX,0
- CMP LINE1+7[SI],' '
- JNE NM2B
- JMP MOVIND
- NM2B: CMP LINE1+7[SI],10
- JNE NM3
- JMP MOVIND
- NM3: CMP LINE1+7[SI],13
- JNE NM4
- JMP MOVIND
- NM4: MOV CX,1
- CMP LINE1+8[SI],' '
- JE PLEFT
- CMP LINE1+8[SI],10
- JE PLEFT
- CMP LINE1+8[SI],13
- JE PLEFT
- MOV CX,2
- CMP LINE1+9[SI],' '
- JE PLEFT
- CMP LINE1+9[SI],10
- JE PLEFT
- CMP LINE1+9[SI],13
- JE PLEFT
- MOV CX,3
- PLEFT: LEA BX,HMAR
- MOV AL,LINE1+7[SI]
- MOV HMAR,AL
- MOV AL,LINE1+8[SI]
- MOV HMAR+1,AL
- MOV AL,LINE1+9[SI]
- MOV HMAR+2,AL
- CALL CONVERT
- JNC CNVLM
- JMP MOVIND
- CNVLM: MOV LMARG,AX
- JMP CKPR15
- SETRIGHT: MOV CX,0
- CMP LINE1+7[SI],' '
- JNE NM5
- JMP MOVIND
- NM5: CMP LINE1+7[SI],10
- JNE NM6
- JMP MOVIND
- NM6: CMP LINE1+7[SI],13
- JNE NM7
- JMP MOVIND
- NM7: MOV CX,1
- CMP LINE1+8[SI],' '
- JE PRIGHT
- CMP LINE1+8[SI],10
- JE PRIGHT
- CMP LINE1+8[SI],13
- JE PRIGHT
- MOV CX,2
- CMP LINE1+9[SI],' '
- JE PRIGHT
- CMP LINE1+9[SI],10
- JE PRIGHT
- CMP LINE1+9[SI],13
- JE PRIGHT
- MOV CX,3
- PRIGHT: LEA BX,HMAR
- MOV AL,LINE1+7[SI]
- MOV HMAR,AL
- MOV AL,LINE1+8[SI]
- MOV HMAR+1,AL
- MOV AL,LINE1+9[SI]
- MOV HMAR+2,AL
- CALL CONVERT
- JNC CNVRM
- JMP MOVIND
- CNVRM: MOV RMARG,AX
- JMP CKPR15
- MOVIND: MOV BX,OFFSET LINE1
- CLC
- ADC LINCNT,1
- CLC
- ADC BX,RMARG ;LOCATE LAST NON-BLANK CHARACTER
- DEC BX
- MOV AX,RMARG
- DEC AX
- MOV COL,AL
- MOV AL,COL
- SUB AL,18
- MOV COL59,AL
- MOV SI,LMARG
- DEC SI
- MOV INDENT,0
- CMP LINE1[SI],' '
- JNE CKBLK1
- MOV INDENT,1
- CMP LINE1+1[SI],' '
- JNE CKBLK1
- MOV INDENT,2
- CMP LINE1+2[SI],' '
- JNE CKBLK1
- MOV INDENT,3
- CMP LINE1+3[SI],' '
- JNE CKBLK1
- MOV INDENT,4
- CMP LINE1+4[SI],' '
- JNE CKBLK1
- MOV INDENT,5
- CMP LINE1+5[SI],' '
- JNE CKBLK1
- MOV INDENT,6
- CMP LINE1+6[SI],' '
- JNE CKBLK1
- JMP NOJUS1
- CKBLK1: MOV AL,ES:[BX] ;BLANK?
- CMP AL,32
- JNE FB1 ;NO--JUMP
- DEC COL ;DECREMENT COLUMN
- MOV AL,COL59
- CMP COL,AL ;COLUMN 59?
- JE NOJUS1 ;YES--JUMP
- DEC BX ;DECREMENT POINTER
- JMP CKBLK1
- NOJUS1: MOV IBITS,0
- MOV IREM,0
- JMP MOVSI1
- FB1: MOV AX,RMARG ;COMPUTE BITS TO INSERT
- SUB AL,COL
- DEC AL
- CMP AL,0
- JNE FB1Z
- JMP MVZ1
- FB1Z: MUL C12
- MOV HWORD,AX
- MOV AL,COL
- SUB AX,LMARG
- SUB AX,INDENT
- MOV HCOL,AL
- INC HCOL
- MOV AX,HWORD
- DIV HCOL
- MOV HBYTE1,AL
- MOV HBYTE2,AH
- CBW
- MOV IBITS,AX
- MOV AL,HBYTE2
- CBW
- MOV IREM,AX
- MOVSI1: MOV AX,LMARG
- ADD AX,INDENT
- DEC AX
- MOV HSI9,AX
- MOV L1SUB,0
- MOV LCOL,0
- MOV AX,LMARG ;SKIP TO STARTING COLUMN
- ADD AX,INDENT
- DEC AX
- CMP AX,0
- JE LUP1
- MUL C12
- MOV CX,AX
- MOV AL,0
- MOVZR1: MOV SI,L1SUB
- MOV L1[SI],AL
- MOV L2[SI],AL
- INC L1SUB
- LOOP MOVZR1
- LUP1: MOV SI,HSI9
- MOV AL,LINE1[SI]
- MUL C24
- MOV HSI2,AX
- MOV CX,12
- LUP2: MOV SI,HSI2
- MOV AX,TRTAB[SI]
- MOV SI,L1SUB
- SAR AX,1
- MOV L1[SI],AL
- MOV SI,HSI2
- MOV AX,TRTAB[SI]
- AND AL,1B
- SAL AL,1
- SAL AL,1
- SAL AL,1
- SAL AL,1
- SAL AL,1
- SAL AL,1
- SAL AL,1
- MOV SI,L1SUB
- MOV L2[SI],AL
- INC L1SUB
- INC HSI2
- INC HSI2
- LOOPNZ LUP2
- CMP IBITS,0
- JE CKRM1
- MOV CX,IBITS
- LUP3: MOV SI,L1SUB
- MOV L1[SI],0
- MOV L2[SI],0
- INC L1SUB
- LOOPNZ LUP3
- CKRM1: CMP IREM,0
- JE CKE1
- DEC IREM
- MOV SI,L1SUB
- MOV L1[SI],0
- MOV L2[SI],0
- INC L1SUB
- CKE1: CMP L1SUB,960
- JGE NEWLN4
- INC HSI9
- JMP LUP1
- NEWLN4: MOV AL,255
- INC BX
- CMP ES:[BX],AL
- JE LUP8B
- MOV AL,32
- MOV ES:[BX],AL
- JMP NEWLN4
- LUP8B: MOV HSI4,-1 ;SUBSCRIPT
- MOV DX,0 ;PRINTER NUMBER
- MOV AH,0 ;SET PRINTER SPACING TO 1/9 INCH
- MOV AL,SPAC19
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR4
- RET
- CKPR4: MOV AH,0
- MOV AL,SPAC19+1
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPRZ1
- RET
- CKPRZ1: MOV AH,0
- MOV AL,SPAC19+2
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPRZZ
- RET
- CKPRZZ: MOV AH,0
- MOV AL,27 ;SET PRINTER TO DUAL DENSITY GRAPHICS
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPRZ2
- RET
- CKPRZ2: MOV AH,0
- MOV AL,76
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR5
- RET
- CKPR5: MOV AH,0
- MOV AL,192
- MOV DX,0
- INT 17H
- MOV AH,0
- MOV AL,3
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE LOOPCHR
- RET
- LOOPCHR: MOV DX,0 ;PRINTER NUMBER
- INC HSI4 ;BUMP SUBSCRIPT
- MOV SI,HSI4
- MOV AL,L1[SI]
- MOV AH,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR6
- RET
- CKPR6: INC SI
- CMP SI,960 ;END OF TABLE?
- JNE LOOPCHR ;NO--BRANCH
- MOV AH,0 ;CARRIAGE RETURN
- MOV AL,13
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR7
- RET
- CKPR7: MOV AH,0 ;LINE FEED
- MOV AL,10
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE NOTE9
- RET
- NOTE9: MOV HSI4,-1 ;SUBSCRIPT
- MOV DX,0 ;PRINTER NUMBER
- MOV AH,0 ;SET PRINTER SPACING TO 1/18 INCH
- MOV AL,SPAC118
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR8
- RET
- CKPR8: MOV AH,0
- MOV AL,SPAC118+1
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR9
- RET
- CKPR9: MOV AH,0
- MOV AL,SPAC118+2
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR10
- RET
- CKPR10: MOV AH,0
- MOV AL,27 ;SET PRINTER TO DUAL DENSITY GRAPHICS
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR11
- RET
- CKPR11: MOV AH,0
- MOV AL,76
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR12
- RET
- CKPR12: MOV AH,0
- MOV AL,192
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR12Z
- RET
- CKPR12Z: MOV AH,0
- MOV AL,3
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE LOOPCH2
- RET
- LOOPCH2: MOV DX,0 ;PRINTER NUMBER
- INC HSI4 ;BUMP SUBSCRIPT
- MOV SI,HSI4
- MOV AL,L2[SI]
- MOV AH,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR13
- RET
- CKPR13: INC SI
- CMP SI,960 ;END OF TABLE?
- JNE LOOPCH2 ;NO--BRANCH
- MOV AH,0 ;CARRIAGE RETURN
- MOV AL,13
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR14
- RET
- CKPR14: MOV AH,0 ;LINE FEED
- MOV AL,10
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE CKPR15
- RET
- CKPR15: MOV SI,OFFSET LINE2
- MOV DI,OFFSET LINE1
- MOV CX,LENGTH LINE2
- REP MOVS LINE1,LINE2
- CMP ENDSW,888
- JE EOJ
- JMP MOVBX2
- ENDF1: CMP ENDSW,0
- JE EOJ
- MOV ENDSW,888
- JMP NOJUS1
- EOJ: MOV AH,0 ;TELL PRINTER TO SKIP TO HOF
- MOV AL,12
- MOV DX,0
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE EOJZZ
- RET
- EOJZZ: MOV DX,0 ;SET PRINTER SPACING TO 1/6 INCH
- MOV AH,0
- MOV AL,SPAC16
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE EOJZ1
- RET
- EOJZ1: MOV AH,0
- MOV AL,SPAC16+1
- INT 17H
- CALL CHKPRTR
- CMP AH,99
- JNE EOJZ2
- RET
- EOJZ2: MOV AH,0
- MOV AL,SPAC16+2
- INT 17H
- CALL CHKPRTR
- RET
- JUS_PROC ENDP
- CONVERT PROC NEAR
- PUSH BX ;SAVE BX AND CX
- PUSH CX
- SUB AX,AX ;TO START, RESULT=0,
- SUB DX,DX ; DECIMAL COUNT=0,
- MOV DI,0FFH ; ASSUME NO BAD CHARACTERS
- CMP CX,7 ;STRING TOO LONG?
- JA NO_GOOD ;IF SO, GO SET CF AND EXIT
- BLANKS: CMP BYTE PTR [BX],' ' ;SCAN PAST LEADING BLANKS
- JNE CHK_NEG
- INC BX
- LOOP BLANKS
- CHK_NEG: CMP BYTE PTR [BX],'-' ;NEGATIVE NUMBER?
- JNE CHK_POS
- INC BX ;IF SO, INCREMENT POINTER,
- DEC CX ; DECREMENT THE COUNT,
- CALL CONV_AB ; AND CONVERT THE STRING
- JC THRU
- CMP AX,32768 ;IS THE NUMBER TOO SMALL?
- JA NO_GOOD
- NEG AX ;NO, COMPLEMENT THE RESULT
- JS GOOD
- CHK_POS: CMP BYTE PTR [BX],'+' ;POSITIVE NUMBER?
- JNE GO_CONV
- INC BX ;IF SO, INCREMENT POINTER,
- DEC CX ; DECREMENT THE COUNT,
- GO_CONV: CALL CONV_AB ; AND CONVERT THE STRING
- JC THRU
- CMP AX,32767 ;IS THE NUMBER TOO BIG?
- JA NO_GOOD
- GOOD: CLC
- JNC THRU
- NO_GOOD: STC ;IF SO, SET CARRY FLAG
- THRU: POP CX ;RESTORE REGISTERS
- POP BX
- RET ; AND EXIT
- CONV_AB: PUSH BP ;SAVE SCRATCH REGISTERS
- PUSH BX
- PUSH SI
- MOV BP,BX
- CHK_PT: CMP DX,0 ;DECIMAL POINT ALREADY FOUND?
- JNZ RANGE ; IF SO, SKIP FOLLOWING CHECK
- CMP BYTE PTR DS:[BP],'.' ;DECIMAL POINT?
- JNE RANGE
- DEC CX ;IF SO,DECREMENT COUNT,
- MOV DX,CX ; AND RECORD IT IN DX
- JZ END_CONV ; EXIT IF CX=0
- INC BP ; INCREMENT POINTER
- RANGE: CMP BYTE PTR DS:[BP],'0' ;IF THE CHARACTER IS NOT A DIGIT
- JB NON_DIG
- CMP BYTE PTR DS:[BP],'9'
- JBE DIGIT
- NON_DIG: MOV DI,BP ;PUT ITS ADDRESS IN DI,
- STC ; SET THE CARRY FLAG,
- JC END_CONV ; AND EXIT
- DIGIT: MOV SI,10 ;THE CHARACTER IS A DIGIT,
- PUSH DX
- MUL SI ; SO MULTIPLY AX BY 10
- POP DX
- MOV BL,DS:[BP] ; FETCH ASCII CODE,
- AND BX,0FH ; SAVE ONLY HIGH BITS,
- ADD AX,BX ; AND UPDATE PARTIAL RESULT
- JC END_CONV ; EXIT IF RESULT IS TOO BIG
- INC BP ; OTHERWISE, INCREMENT
- LOOP CHK_PT ; BP AND CONTINUE
- CLC ; WHEN DONE, CLEAR CARRY FLAG
- END_CONV: POP SI ; RESTORE REGISTERS
- POP BX
- POP BP
- RET
- CONVERT ENDP
- CHKPRTR PROC NEAR
- PUSH AX
- PUSH DX
- TEST AH,1
- JNZ TIMEOUT
- TEST AH,32
- JNZ OUTPAPR
- TEST AH,8
- JNZ IOERR
- JMP RTRN
- IOERR: MOV AH,9
- LEA DX,PERR
- INT 21H
- POP DX
- POP AX
- MOV AH,99
- RET
- TIMEOUT: PUSH AX
- PUSH DX
- MOV AH,9
- LEA DX,TOUT
- INT 21H
- DRDK: LEA DX,BUFFER
- MOV AL,2
- MOV BUFFER,AL
- MOV AH,10
- INT 21H
- POP DX
- POP AX
- INT 17H
- RTRN: POP DX
- POP AX
- RET
- OUTPAPR: PUSH AX
- PUSH DX
- MOV AH,9
- LEA DX,OPAPR
- INT 21H
- JMP DRDK
- CHKPRTR ENDP
- JUS_CSEG ENDS
- END JUS_PROC